package pwd.allen.spring.producter;

import com.alibaba.fastjson.JSON;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 消息生产者
 *
 * 测试：
 *  可以访问rabbitmq web管理端手动发布信息
 *  访问地址：http://192.168.118.102:15672/#/queues/my_vhost/direct_exchange_queue_1
 *  信息需要加上content_type这个properties，否则监听器会报错
 *  Failed to invoke target method 'listen' with argument type = [class [B], value = [{[B@68fcc5eb}]
 *
 * @author 门那粒沙
 * @create 2020-04-06 8:23
 **/
public class MsgSender {

    public static void main(String[] args) throws Exception {
        AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(
                "classpath:spring/producter-context.xml");
        //RabbitMQ模板
        RabbitTemplate template = ctx.getBean(RabbitTemplate.class);

        //这里有个坑：帐号名我在配置文件中用username作为属性键，结果login失败，后来发现获取的是计算机的用户名，这个属性键本来就存在的；可以加上local-override="true"或者换个属性键
        System.out.println(ctx.getEnvironment().getProperty("username"));

        String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());//24小时制
        //发送消息
        Map<String, Object> msg = new HashMap<String, Object>();
        msg.put("type", "1");
        msg.put("date", date);
        template.convertAndSend("direct", JSON.toJSONString(msg));
        Thread.sleep(1000);// 休眠1秒
        ctx.close(); //容器销毁
    }
}
